// import url from 'url';
// import path from 'path';
import globals from 'globals';
import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
// this setting both eslint-plugin-prettier and eslint-config-prettier
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
// 解析旧版配置
// https://eslint.org/docs/latest/use/configure/migration-guide
// import { FlatCompat } from '@eslint/eslintrc';

// deal ReferenceError: __dirname is not defined in ES module scope
// const __filename = url.fileURLToPath(import.meta.url);
// const __dirname = path.dirname(__filename);
// const compat = new FlatCompat({
//   baseDirectory: __dirname,
// });

export default tseslint.config(
  /**
   * eslint 推荐配置
   */
  eslint.configs.recommended,

  /**
   * ts eslint 推荐配置
   */
  ...tseslint.configs.recommended,

  /**
   * prettier eslint 配置
   * @link https://www.npmjs.com/package/eslint-plugin-prettier
   * @desc Any other config imports go at the top
   */
  eslintPluginPrettierRecommended,

  /**
   * 配置全局变量
   */
  {
    languageOptions: {
      globals: {
        ...globals.es2023,
        ...globals.node,
      },
    },
  },

  /**
   * typescript 规则
   */
  {
    plugins: {
      '@typescript-eslint': tseslint.plugin,
    },
    files: ['**/*.ts'],
    rules: {
      // 未使用变量警告
      '@typescript-eslint/no-unused-vars': 'off',
      // 允许使用any
      '@typescript-eslint/no-explicit-any': 'off',
      // 允许使用空函数
      '@typescript-eslint/no-empty-function': 'off',
      // 禁止使用空对象类型
      '@typescript-eslint/no-empty-object-type': 'off',
      // 允许使用表达式
      '@typescript-eslint/no-unused-expressions': 'off',
    },
  },

  /**
   * 自定义规则
   */
  {
    // 规则
    rules: {
      'prettier/prettier': ['error'],
      // 使用单引号
      quotes: ['warn', 'single'],
      // 生产环境禁用 console
      'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
      // 生产环境禁用 debugger
      'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    },
  },

  /**
   * 配置忽略文件/目录
   */
  {
    ignores: [
      'node_modules',
      'dist',
      'build',
      'public',
      '**/*.json',
      '**/*.md',
      '**/*.yml',
      '**/*.yaml',
      '.vscode',
      '.idea',
      '.husky',
    ],
  },
);
